/// 1. 从不返回的never type
/// - Rust 有一个叫做 ! 的特殊类型。在类型理论术语中，它被称为 empty type，因为它没有值。
/// - 我们更倾向于称之为 never type。在函数不返回的时候充当返回值

fn bar() -> ! {  // 类似于这种
    loop {}
}
// Option<T> 上的 unwrap 函数代码
// impl<T> Option<T> {
//     pub fn unwrap(self) -> T {
//         match self {
//             None => {panic!("报错");}
//             Some(val) => {val}
//         }
//     }
// }

//以下例子为《Rust程序设计语言》中第二章“猜猜看”游戏的例子
use std::io;
use std::cmp::Ordering;
use rand::Rng;
fn main() {
    println!("猜猜数字！");
    let secret_number = rand::thread_rng().gen_range(1..101);
    loop {
        println!("请输入你猜测的数字 😄");
        let mut guess = String::new();
        io::stdin().read_line(&mut guess)
            .expect("读取行失败");
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue, //continue 的值是 !。
            //当 Rust 要计算 guess 的类型时，它查看这两个分支。
            //前者是 u32 值，而后者是 ! 值。
            //因为 ! 并没有一个值，Rust 决定 guess 的类型是 u32
        };
        println!("你猜的数字为：{}", guess);
        match guess.cmp(&secret_number) {
            Ordering::Less => println!("太小了 😒"),
            Ordering::Greater => println!("太大了 😒"),
            Ordering::Equal => {
                println!("恭喜你，猜中了 🎇");
                break;
            }
        }
    }
}
